/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.saber.certificacao.modelos.validadores;

import br.com.saber.certificacao.ejbs.stateless.interfaces.CertificacaoBeanLocal;
import br.com.saber.certificacao.modelos.Certificacao;
import br.com.saber.certificacao.modelos.validadores.exceptions.CertificacaoException;
import br.com.saber.certificacao.modelos.validadores.exceptions.generica.ValidacaoExcecao;
import br.com.saber.certificacao.modelos.validadores.interfaces.ValidadorInterface;
import org.apache.commons.lang.StringUtils;

/**
 * Classe utilizada para validar as propriedades de um objeto Certificacao.
 * @author gbvbahia
 */
public class CertificacaoValidador implements ValidadorInterface<Certificacao, CertificacaoBeanLocal>{

    private void validar(Certificacao entidade, CertificacaoBeanLocal bean) throws ValidacaoExcecao{
        if(StringUtils.isBlank(entidade.getEmpresa())){
           lancarException(("certificacaoEmpresaNula"), "Empresa");
        }
        if(entidade.getEmpresa().length() > 50){
            lancarException(("certificacaoEmpresaLong"), "Empresa");
        }
        if(entidade.getCoordenador() == null){
            lancarException(("certificacaoCoordenadorNulo"),"Coordenador");
        }
        if(StringUtils.isBlank(entidade.getNome())){
            lancarException(("certificacaoNomeNulo"), "Nome");
        }
        if(entidade.getNome().length() > 50){
            lancarException(("certificacaoNomeLong"),"Nome");
        }
        
        Certificacao nomeVerifica = bean.buscarCertificacaoPorNome(entidade.getNome());
        if(entidade.getId() == null && nomeVerifica != null){
            lancarException(("certificacaoNomeExistente"),"Nome");
        }
        if(nomeVerifica != null && entidade.getId() != null &&
                !entidade.getId().equals(nomeVerifica.getId()) &&
                entidade.getNome().equalsIgnoreCase(nomeVerifica.getNome())){
                lancarException(("certificacaoNomeExistente"),"Nome");
        }
    }

    private void lancarException(String msg, String atributo){
        CertificacaoException ex = new CertificacaoException(msg);
        ex.setAtributoName(atributo);
        throw ex;
    }

    @Override
    public void validar(Certificacao entidade, CertificacaoBeanLocal bean, Object object) throws ValidacaoExcecao {
        this.validar(entidade, bean);
    }



}
